package controllers;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import models.Enquete;
import models.Opcao;
import models.Resposta;
import play.mvc.Controller;

public class EnqueteController extends Controller {
	public static List<Opcao> opcoes;
	
	public static void index() {
		if(! Application.isLogged()) return; 
		
		String menu;
    	String rodape = Application.rodapebasic;
    	if(Application.sessao.get("tipo").compareTo("0") == 0){
    		menu = Application.menubasic;
    	}
    	else{
    		menu = Application.menufull;
    	}
		
    	if (EnqueteController.opcoes == null){
    		EnqueteController.opcoes = new ArrayList<Opcao>();
    	}
    	
		List<Opcao> opcoes = EnqueteController.opcoes;
		
		render("Application/cadEnquete.html", opcoes, menu, rodape);
    }
	
	public static void exibicao() {
		if(! Application.isLogged()) return;
		
		String menu;
    	String rodape = Application.rodapebasic;
    	if(Application.sessao.get("tipo").compareTo("0") == 0){
    		menu = Application.menubasic;
    	}
    	else{
    		menu = Application.menufull;
    	}
		
		try {
			List<Enquete> lis = Enquete.all();
		
			// Mostra a tela de exibicao
    		render("Application/exibicaoEnquete.html", lis, menu, rodape);
		}
		catch(SQLException ex) {
			String msg = "O codigo SQL teve um comportamento inesperado!";
    		
    		// Java Script mostrando a mensagem de erro!
            String 	script = "<script language=\"javascript\" type=\"text/javascript\">";
            		script += "alert ( \" " + msg + "\" ) </script> ";
            render("Application/cadEnquete.html", script, menu, rodape);
            return;
		}
    }
	
	public static void exibicao(String script) {
		if(! Application.isLogged()) return;
		
		String menu;
    	String rodape = Application.rodapebasic;
    	if(Application.sessao.get("tipo").compareTo("0") == 0){
    		menu = Application.menubasic;
    	}
    	else{
    		menu = Application.menufull;
    	}
		
		try {
			List<Enquete> lis = Enquete.all();
		
			// Mostra a tela de exibicao
    		render("Application/exibicaoEnquete.html", lis, script, menu, rodape);
		}
		catch(SQLException ex) {
			String msg = "O codigo SQL teve um comportamento inesperado!";
    		
    		// Java Script mostrando a mensagem de erro!
            script = "<script language=\"javascript\" type=\"text/javascript\">";
            		script += "alert ( \" " + msg + "\" ) </script> ";
            render("Application/cadEnquete.html", script, menu, rodape);
            return;
		}
    }

    public static void add() {
    	if(! Application.isLogged()) return;
    	
		String menu;
    	String rodape = Application.rodapebasic;
    	if(Application.sessao.get("tipo").compareTo("0") == 0){
    		menu = Application.menubasic;
    	}
    	else{
    		menu = Application.menufull;
    	}
    	
    	String msg;
    	List<Opcao> opcoes = EnqueteController.opcoes;
    	
    	// Criando a enquete
        Enquete enquete = new Enquete();
        
        enquete.setPergunta(params.get("pergunta"));
        
        // Validacao dos campos
        if (enquete.getPergunta().isEmpty()) {
        	msg = "Pergunta Invalida!";
        }
        if(EnqueteController.opcoes.size()<2){
        	msg = "Ha menos do que duas Opcoes.";
        }
        else {
        	// Deu certo! Inserir no banco
        	enquete.setCodigo_usuario(Integer.parseInt(Application.sessao.get("codigo")));

        	try {
        		enquete.save();
        		
            	enquete.setOpcoes(EnqueteController.opcoes);
            	
            	enquete.saveOptions();
            	
            	EnqueteController.opcoes.clear();
            	
            	//render("Application/cadEnquete.html", opcoes);
            	exibicao();
        	}
        	catch(SQLException ex) {
        		msg = "O codigo SQL teve um comportamento inesperado!";
            	
        		// Java Script mostrando a mensagem de erro!
                String 	script = "<script language=\"javascript\" type=\"text/javascript\">";
                		script += "alert ( \" " + msg + "\" ) </script> ";
                render("Application/cadEnquete.html", script, opcoes, menu, rodape);
                return;
        	}
        	return;
        }
       
        // Java Script mostrando a mensagem de erro!
        String 	script = "<script language=\"javascript\" type=\"text/javascript\">";
        		script += "alert ( \" " + msg + "\" ) </script> ";
        render("Application/cadEnquete.html", script, opcoes, menu, rodape);
	}
    
    public void excluirEnquete(int codigoEnquete) {
    	if(!Application.isLogged()) return;
		Enquete.delete(codigoEnquete);
		exibicao();
	}
    
    public static void inserirOpcao(){
    	if (EnqueteController.opcoes == null){
    		EnqueteController.opcoes = new ArrayList<Opcao>();
    	}
    	
		String menu;
    	String rodape = Application.rodapebasic;
    	if(Application.sessao.get("tipo").compareTo("0") == 0){
    		menu = Application.menubasic;
    	}
    	else{
    		menu = Application.menufull;
    	}
    	
    	Opcao opcao = new Opcao();

    	opcao.setDescricao(params.get("opcaodesc"));

    	// Validacao dos campos
    	if (opcao.getDescricao().isEmpty()) {
    		String msg = "Descricao da Opcao Invalida!";
    		
            // Java Script mostrando a mensagem de erro!
            String 	script = "<script language=\"javascript\" type=\"text/javascript\">";
            		script += "alert ( \" " + msg + "\" ) </script> ";

        	List<Opcao> opcoes = EnqueteController.opcoes;
        	render("Application/cadEnquete.html", script ,opcoes, menu, rodape);
        } else {
        	// Deu certo! Inserir na lista
        	int codigo = 0;
        	for (int i=0; i<EnqueteController.opcoes.size(); i++){
        		if (EnqueteController.opcoes.get(i).getCodigo() >= codigo){
        			codigo = EnqueteController.opcoes.get(i).getCodigo() + 1;
        		}
        	}
        	opcao.setCodigo(codigo);
        	
        	EnqueteController.opcoes.add(opcao);
        	
        	List<Opcao> opcoes = EnqueteController.opcoes;
        	render("Application/cadEnquete.html",opcoes, menu, rodape);
        }
    }
    
    public static void excluirOpcao(int codigo){
		String menu;
    	String rodape = Application.rodapebasic;
    	if(Application.sessao.get("tipo").compareTo("0") == 0){
    		menu = Application.menubasic;
    	}
    	else{
    		menu = Application.menufull;
    	}
    	if (EnqueteController.opcoes == null){
    		EnqueteController.opcoes = new ArrayList<Opcao>();
    	}
    	else{
    		int tam = EnqueteController.opcoes.size();
    		for (int i=0; i<tam; i++){
    			if (EnqueteController.opcoes.get(i).getCodigo()==codigo){
    				EnqueteController.opcoes.remove(i);
    				i = tam;
    			}
    		}
    	
    		List<Opcao> opcoes = EnqueteController.opcoes;
    	
    		render("Application/cadEnquete.html", opcoes, menu, rodape);
    	}
    }
    
    public static void showResponder(int codigoEnquete){
		String menu;
    	String rodape = Application.rodapebasic;
    	if(Application.sessao.get("tipo").compareTo("0") == 0){
    		menu = Application.menubasic;
    	}
    	else{
    		menu = Application.menufull;
    	}
    	
    	try{
    		Enquete enquete = Enquete.find(codigoEnquete);
    		List<Opcao> lis = enquete.getOpcoes();
    		Resposta resposta = Resposta.getUsuarioEnquete(Integer.parseInt(Application.sessao.get("codigo")), codigoEnquete);
    		Opcao opcao = Opcao.getOpcao(resposta.getCodigo_opcao(), resposta.getCodigo_enquete());
    		
    		render("Application/cadResponder.html", enquete, lis, resposta, opcao, menu);
    	}
    	catch (SQLException ex){
    		String msg = "O codigo SQL teve um comportamento inesperado!";
        	
    		// Java Script mostrando a mensagem de erro!
            String 	script = "<script language=\"javascript\" type=\"text/javascript\">";
            		script += "alert ( \" " + msg + "\" ) </script> ";
            render("Application/exibicaoEnquete.html", script, menu, rodape);
            return;
    	}
    }
    
    public static void responder(int codigoEnquete){
    	if(! Application.isLogged()) return;
    	
		String menu;
    	String rodape = Application.rodapebasic;
    	if(Application.sessao.get("tipo").compareTo("0") == 0){
    		menu = Application.menubasic;
    	}
    	else{
    		menu = Application.menufull;
    	}
    	
    	String msg = "";
    	
    	// Criando a resposta
    	Resposta resposta = new Resposta();
        
    	// Validacao dos campos
        if (params.get("opcaoEscolhida")!=null){
        	resposta.setCodigo_usuario(Integer.parseInt(Application.sessao.get("codigo")));
            resposta.setCodigo_enquete(codigoEnquete);
            resposta.setCodigo_opcao(Integer.parseInt(params.get("opcaoEscolhida")));
            
            try{
            	resposta.save();
            	showResponder(codigoEnquete);
            }
            catch (SQLException ex) {
        		msg = "O codigo SQL teve um comportamento inesperado!";
            	
        		// Java Script mostrando a mensagem de erro!
                String 	script = "<script language=\"javascript\" type=\"text/javascript\">";
                		script += "alert ( \" " + msg + "\" ) </script> ";
                exibicao(script);
                return;
			}
            return;
        }
        else{
        	msg = "Selecione uma Opcao!";
        }
        
        // Java Script mostrando a mensagem de erro!
        String 	script = "<script language=\"javascript\" type=\"text/javascript\">";
        		script += "alert ( \" " + msg + "\" ) </script> ";
        exibicao(script);
    }
}
